home *** CD-ROM | disk | FTP | other *** search
- /* $Revision Header *** Header built automatically - do not edit! ***********
- *
- * (C) Copyright 1991 by Torsten Jürgeleit
- *
- * Name .....: save.c
- * Created ..: Sunday 22-Dec-91 21:23:04
- * Revision .: 2
- *
- * Date Author Comment
- * ========= ==================== ====================
- * 02-Oct-92 Michael Bjerking New realese, better Screen/Window editor
- * 31-Dec-91 Torsten Jürgeleit new font management
- * 22-Dec-91 Torsten Jürgeleit Created this file!
- *
- ****************************************************************************
- *
- * Save ISUP files
- *
- * $Revision Header ********************************************************/
-
- /* Includes */
-
- #include "includes.h"
- #include "defines.h"
- #include "imports.h"
- #include "protos.h"
-
- /* Save project */
-
- SHORT
- save_project(VOID)
- {
- struct rtFileRequester *freq = project_file_requester;
- SHORT status = EDITOR_STATUS_NORMAL;
- BYTE filename[256], buf[256]; /* <- should define a constant */
-
- /* Display ReqTools file requester and check if user selected cancel */
- IChangeMousePointer(ewin, NULL, FALSE);
-
- if (rtFileRequest(freq, filename, PROJECT_SAVE_HAIL_TEXT, TAG_END))
- {
- struct TemplateList *tl = &template_list;
- FILE *fh; /* BPTR fh; */
- SHORT len = strlen(filename) - 4;
-
- /* Prepare file name and project name */
- if (len < 1 || strcmp(filename + len, ".tpl"))
- {
- strcat(filename, ".tpl");
- len += 4;
- }
-
- /* filename = path + name */
- if (strlen(freq->Dir) > 0)
- {
- strcpy(buf, filename);
- if (strncmp(buf + strlen(buf) - 1, ":", (size_t) 1) == 0)
- sprintf(filename, "%s/%s", freq->Dir, buf);
- else
- sprintf(filename, "%s%s", freq->Dir, buf);
- }
-
- change_project_name(tl, filename, len);
-
- /* Check if file already exists and inform user */
- if (fh = fopen(filename, "r"))
- fclose(fh);
-
- if (!fh || ok_cancel_requester(" Save ", "File already exists.\\n\\n"
- "Do you really want to overwrite?") == TRUE)
- {
-
- /* Open file and write project data */
- if (!(fh = fopen(filename, "w+")))
- {
- status = EDITOR_ERROR_OPEN_FAILED;
- }
- else
- {
- if ((status = write_project_header(fh, tl)) ==
- EDITOR_STATUS_NORMAL)
- {
- if ((status = write_project_fonts(fh, tl)) ==
- EDITOR_STATUS_NORMAL)
- {
- status = write_project_templates(fh, tl);
- }
- }
- fclose(fh);
-
- /* If any error then delete incomplete project file */
- if (status != EDITOR_STATUS_NORMAL)
- {
- DeleteFile(filename);
- }
- else
- {
- tl->tl_Flags &= ~TEMPLATE_LIST_FLAG_CHANGED;
- }
- }
- }
- }
- IRestoreMousePointer(ewin);
- if (status != EDITOR_STATUS_NORMAL)
- {
- show_error(status);
- }
- return (status);
- }
-
- /* Write project header to save file */
-
- STATIC SHORT
- write_project_header(FILE * fh, struct TemplateList * tl)
- {
- SHORT status;
-
- if (fprintf(fh,
- "\n\t/* Project: %s */\n\n"
- "BEGIN PROJECTHEADER\n"
- " LEFTEDGE=%d\n"
- " TOPEDGE=%d\n"
- " WIDTH=%d\n"
- " HEIGHT=%d\n"
- " MINW=%d\n"
- " MINH=%d\n"
- " MAXW=%d\n"
- " MAXH=%d\n"
- " DETAILPEN=%d\n"
- " BLOCKPEN=%d\n"
- " FLAGS=%d\n"
- " WINFLAGS=%d\n"
- " IDCMPFLAGS=%d\n"
- " ID=\"%s\"\n"
- " NAME=\"%s\"\n"
- "END PROJECTHEADER\n",
- &tl->tl_ProjectName[0],
- pwin->LeftEdge,
- pwin->TopEdge,
- pwin->Width,
- pwin->Height,
- pwin->MinWidth,
- pwin->MinHeight,
- pwin->MaxWidth,
- pwin->MaxHeight,
- pwin->DetailPen,
- pwin->BlockPen,
- tl->tl_Flags,
- pwin->Flags,
- tl->tl_IDCMPFlags,
- &tl->tl_ProjectID[0],
- &tl->tl_ProjectWinName[0]) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- status = EDITOR_STATUS_NORMAL;
-
- return (status);
- }
-
- /* Write all template fonts to save file */
-
- STATIC SHORT
- write_project_fonts(FILE * fh, struct TemplateList * tl)
- {
- struct TemplateFont *tf;
- USHORT count = 0;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- for (count = 0, tf = get_head((struct List *) & tl->tl_Fonts);
- tf && status == EDITOR_STATUS_NORMAL; count++,
- tf = get_succ((struct Node *) & tf->tf_MinNode))
- {
- struct TextAttr *ta = &tf->tf_TextAttr;
-
- if (fprintf(fh, "\n\t/* Font %d */\n\n"
- "BEGIN FONT\n"
- " NAME=\"%s\"\n"
- " YSIZE=%d\n"
- "END FONT\n", count, ta->ta_Name, ta->ta_YSize) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- return (status);
- }
-
- /* Write all templates to save file */
-
- STATIC SHORT
- write_project_templates(FILE * fh, struct TemplateList * tl)
- {
- struct Template *tp;
- UBYTE count;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- for (count = 0, tp = get_head((struct List *) & tl->tl_Templates);
- tp && status == EDITOR_STATUS_NORMAL;
- count++, tp = get_succ(&tp->tp_Node))
- {
- struct Box *box = &tp->tp_Box;
- UBYTE type = tp->tp_Type;
-
- /* Write standard data */
- if (fprintf(fh, "\n\t/* Template %d: %s */\n\n"
- "BEGIN TEMPLATE\n"
- " NAME=\"%s\"\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " BEGIN BOX\n"
- " X1=%d\n"
- " Y1=%d\n"
- " X2=%d\n"
- " Y2=%d\n"
- " END BOX\n", count, template_type_text_array[type],
- &tp->tp_TemplateName[0], type, tp->tp_Flags, box->bo_X1,
- box->bo_Y1, box->bo_X2, box->bo_Y2) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- {
-
- /* Write text list if any */
- if (type == TEMPLATE_TYPE_MX || type == TEMPLATE_TYPE_CYCLE ||
- type == TEMPLATE_TYPE_LISTVIEW)
- {
- if (fprintf(fh, " BEGIN TEXTLIST\n") == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- {
- struct Node *node;
-
- for (node = get_head(&tp->tp_TextList); node &&
- status == EDITOR_STATUS_NORMAL; node = get_succ(node))
- {
- if (fprintf(fh, " TEXT=\"%s\"\n",
- node->ln_Name) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- if (status == EDITOR_STATUS_NORMAL)
- {
- if (fprintf(fh, " END TEXTLIST\n") == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- }
-
- /* Write template data */
- if (status == EDITOR_STATUS_NORMAL)
- {
- struct BorderData *bd;
- struct TextData *td;
- struct GadgetData *gd;
- BYTE *fmt;
-
- switch (TEMPLATE_GROUP(tp))
- {
- case TEMPLATE_GROUP_BORDER:
-
- /* Write border data */
- bd = &tp->tp_Data.tp_BorderData;
- if (fprintf(fh,
- " BEGIN BORDERDATA\n"
- " TYPE=%d\n"
- " END BORDERDATA\n", bd->bd_Type) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- break;
-
- case TEMPLATE_GROUP_TEXT:
-
- /* Write text data */
- td = &tp->tp_Data.tp_TextData;
- if (td->td_Type == TEXT_DATA_TYPE_TEXT)
- {
- fmt = " BEGIN TEXTDATA\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " TEXT=\"%s\"\n"
- " TEXTATTR=%d\n"
- " END TEXTDATA\n";
- }
- else
- {
- fmt = " BEGIN TEXTDATA\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " TEXT=%ld\n"
- " TEXTATTR=%d\n"
- " END TEXTDATA\n";
- }
- if (fprintf(fh, fmt, td->td_Type, td->td_Flags,
- td->td_Text, get_template_font_num(tl,
- td->td_TextAttr)) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- break;
-
- case TEMPLATE_GROUP_GADGET:
-
- /* Write gadget data */
- gd = &tp->tp_Data.tp_GadgetData;
- if (fprintf(fh,
- " BEGIN GADGETDATA\n"
- " TYPE=%ld\n"
- " FLAGS=%ld\n", gd->gd_Type,
- gd->gd_Flags) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- {
- if (!gd->gd_Text)
- {
- fmt = " TEXT=%ld\n";
- }
- else
- {
- fmt = " TEXT=\"%s\"\n";
- }
- if (fprintf(fh, fmt, gd->gd_Text) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- {
- if (gd->gd_Type == GADGET_DATA_TYPE_STRING)
- {
- fmt = " TEXTATTR=%d\n"
- " SPECIAL1=%ld\n"
- " SPECIAL2=%ld\n"
- " SPECIAL3=\"%s\"\n";
- }
- else
- {
- fmt = " TEXTATTR=%d\n"
- " SPECIAL1=%ld\n"
- " SPECIAL2=%ld\n"
- " SPECIAL3=%ld\n";
- }
- if (fprintf(fh, fmt, get_template_font_num(tl,
- gd->gd_TextAttr),
- gd->gd_SpecialData.gd_Data.gd_Data1,
- gd->gd_SpecialData.gd_Data.gd_Data2,
- gd->gd_SpecialData.gd_Data.gd_Data3) == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- else
- {
- if (fprintf(fh, " END GADGETDATA\n") == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- }
- break;
- }
- }
- if (status == EDITOR_STATUS_NORMAL)
- {
- if (fprintf(fh, "END TEMPLATE\n") == -1L)
- {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- }
- return (status);
- }
-